import {IGenerate} from './igenerate';

/**
 * ko的自定义loader，用于创建ko-easyui组件的生命周期
 */
export class EasyuiLoader{
    public factory:IGenerate;
    constructor(factory: IGenerate){ 
        this.factory = factory;
    }
    getConfig(name:any, callback:any){
        callback(null);
    }
    loadComponent(name:any, componentConfig:any, callback:any){
        callback(null);
    }
    loadTemplate(name:any, templateConfig:any, callback:any){
        //这里做一些视图不显示的控制，在渲染数据后，进行视频的展示
        callback(null);
    }
    loadViewModel(name:any, viewModelConfig:any, callback:any){
        //到这里，视图都是已经呈现好的
        //这里要产生两个生命周期：渲染数据前、渲染数据后，以及一个视图重绘的事件
        var nViewModelConfig = (params, componentConfig) => {
            
            //获取root对象
            let $root = ko.contextFor(componentConfig.element).$root;
            let vm = new viewModelConfig(params, componentConfig, $root);
            //激活
            if(vm.activate){
                vm.activate(params,componentConfig);
            }
            let name, that = this;
            vm.koDescendantsComplete = function(dom){
                //组件绑定完成后的事件
                //写入Context到自定义元素dom上
                $.data(dom, ko.contextFor(dom.firstChild));
                that.factory.generate(name, params, vm); 
            }
            return vm;
        }
        callback(nViewModelConfig);
    }
} 